package com.nb;

import com.nb.pojo.Emp;
import com.nb.pojo.People;
import com.nb.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * Hello world!
 *
 */
public class App {
    public static Map<String,Student> studentMap = new HashMap<>();
    public static void main( String[] args ) {
        test10();
    }
    public static void test01(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Student student1  = (Student) ac.getBean("student1");
        Student student2  = (Student) ac.getBean("student2");
        //调用对象的方法
        student1.shout("student1");
        student2.shout("student2");
    }
    //spring提供的方法
    public static void test02(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //获取容器中定义的对象的数量
        int num = ac.getBeanDefinitionCount();
        System.out.println(num);
        //容器中每个定义的对象的名称
        String []names = ac.getBeanDefinitionNames();
        //遍历每个对象的名字：就是bean的id值
        for(String name:names){
            System.out.println(name);
        }
    }
    //简单类型的set注入
    public static void test03(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Student student3  = (Student) ac.getBean("student3");
        System.out.println(student3);
    }
    //引用类型的set注入
    public static void test04(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Student student4  = (Student) ac.getBean("student4");
        System.out.println(student4);
    }
    //构造注入
    public static void test05(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Emp emp1  = (Emp) ac.getBean("emp1");
        Emp emp2  = (Emp) ac.getBean("emp2");
        System.out.println(emp1);
        System.out.println(emp2);
    }
    //引用类型的自动注入：byName
    public static void test06(){
        //制定spring的配置名
        String xml= "spring.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Student student5  = (Student) ac.getBean("student5");
        System.out.println(student5);
    }
    //引用类型的自动注入:byType
    public static void test07(){
        //制定spring的配置名
        String xml= "spring1.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        Student student6  = (Student) ac.getBean("student6");
        System.out.println(student6);
    }
    //注解的使用：注解创建对象
    public static void test08(){
        //制定spring的配置名
        String xml= "ApplicationContext.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        People people1  = (People) ac.getBean("people1");
        System.out.println(people1);
    }
    //注解的使用：简单类型的赋值和引用类型赋值（byType）
    public static void test09(){
        //制定spring的配置名
        String xml= "ApplicationContext3.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        com.nb.pojo1.People people3  = (com.nb.pojo1.People) ac.getBean("people3");
        System.out.println(people3);
    }
    //注解的使用：简单类型的赋值和引用类型赋值（byName）
    public static void test10(){
        //制定spring的配置名
        String xml= "ApplicationContext4.xml";
        //创建srping容器的对象：ApplicationContext
        //spring创建对象的时间，在创建spring的容器时，即此时会创建spring中的所有对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(xml);
        //getBean("spring中的id值");
        com.nb.pojo2.People people4  = (com.nb.pojo2.People) ac.getBean("people4");
        System.out.println(people4);
    }

    //根据hascode和equals方法来判断一个类是否属于同一个类
    public static void test(){
        Set studentSet = new HashSet();
        Student student1 = new Student();
        Student student2 = new Student();
//        student1.setNo(1);
        student1.setName("zhangsan");
//        student2.setNo(2);
        student2.setName("lisi");
        System.out.println(student1 + "   " + student2);
        studentSet.add(student1);
        studentSet.add(student2);
        System.out.println("学生数目：" + studentSet.size());
    }
}
